iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
1
自我挑戰組

卡牌連線遊戲開發經驗分享系列 第 8

#8 狀態機:流程圖的好朋友

  • 分享至 

  • xImage
  •  

今天介紹的是狀態機,這是直覺且容易實作的模型。

通常設計好流程圖之後,可以很輕易轉換成狀態機。狀態機大致包含幾個要素:狀態變數、狀態集、該狀態對應的操作、下一個狀態、起始狀態、結束狀態。操作還可以細分成:進入狀態的操作、離開狀態的操作。

狀態機通常應用在 SOP 的場景,流程中的各個階段給予編號之後,下一個狀態指定對應的編號就可以轉移過去。對於初學程式開發的人來說是非常容易理解的

優點:直覺、簡便、實作快速
缺點:

  1. 狀態只能有一個、無法應付複雜系統,後期程式碼難以維護。
  2. 狀態轉換的邏輯通常很簡單,但分散在各處。有些實作會建立狀態轉換表
  3. 若設計不良可能會有無窮迴圈的狀況發生,但測試時未必能發現。

通常實作方式:

  1. swtich-case
  2. 建立轉移表+func

實作要點:

  1. 使用「狀態變數」判定作為程式流程的判斷
  2. 必須要在該狀態的執行過程中,明確指定「下一個狀態」,否則程式不會往下走
  3. 必須指定「結束狀態」,如果沒有結束狀態的話,可以考慮使用「事件」

後來發現設計模式有狀態模式,但它的概念跟狀態機不太一樣,名詞太接近有時候還是容易搞混。

狀態模式 ( State ) ,當一個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類別。

狀態模式的作法和狀態機是不一樣的。


抱歉今天花很多時間寫另一邊系統底層的東西,狀態機部份文字比較少,但還是希望有幫助到大家
如果有遊戲開發方面的問題都可以提,我未來會寫出來


上一篇
#7 事件驅動開發:從時間寶石中看見的未來
下一篇
#9 萬事起頭難:基礎遊戲架構
系列文
卡牌連線遊戲開發經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言